<?php
/**
 * Created by JetBrains PhpStorm.
 * User: BLB
 * Date: 23-6-11
 * Time: 10:04
 * To change this template use File | Settings | File Templates.
 */

require_once(Config::acquire('Model', null, 'model'));
require_once(Config::acquire('Licentie', MODEL));
require_once(Config::acquire("Leverancier", MODEL));
class Software extends Model
{


     /**
     * initialiseren variabelen
     */
    private $id;
    private $naam;
    private $afkorting;
    private $omschrijving;
    private $versionid;
    private $leverancier;
    private $aanschafdatum;
    private $licentie;


    /**
     * aanmaken van de vriabelen
     */
    public function __construct($id, $naam, $afkorting, $omschrijving, $versionid, Leverancier $leverancier, $aanschafdatum, Licentie $licentie)
    {
        $this->id = $id;
        $this->naam = $naam;
        $this->afkorting = $afkorting;
        $this->omschrijving = $omschrijving;
        $this->versionid = $versionid;
        $this->leverancier = $leverancier;
        $this->aanschafdatum = $aanschafdatum;
        $this->licentie = $licentie;

    }

    /**
     * aanmaken van een nieuw item
     */
    public static function create($id, $naam, $afkorting, $omschrijving, $versionid, Leverancier $leverancier, $aanschafdatum, Licentie $licentie)
    {

        return new Software($id, $naam, $afkorting, $omschrijving, $versionid, $leverancier, $aanschafdatum, $licentie);
    }

     /**
     * Query voor deleten van de gegevens uit de gegeven tabel
     */
    public function delete()
    {
        SQL::execute("DELETE FROM `software` WHERE `software_ID` = {$this->id}");
    }

     /**
     * gegevens naar een array schrijven.
     */
    public function toArray()
    {
        return array(
            "ID" => $this->id,
            "Naam" => $this->naam,
            "Afkorting" => $this->afkorting,
            "Omschrijving" => $this->omschrijving,
            "VersionID" => $this->versionid,
            "Licentie_ID" => $this->licentie->getID(),
            "Licentie_Omschrijving" => $this->licentie->getOmschrijving(),
            "Leverancier_ID" => $this->leverancier->getID(),
            "Leverancier_Naam" => $this->leverancier->getNaam(),
            "Aanschafdatum" => $this->aanschafdatum,
        );

    }

     /**
     * Query voor het updaten van de betreffende tabel
     */
    public function update()
    {
        if (!is_null($this->id)) {
            SQL::execute("UPDATE  `software`
                       SET  `software_Naam` = '{$this->naam}',
                            `software_afk` =  '{$this->afkorting}',
                            `software_Omschrijving` = '{$this->omschrijving}',
                            `software_VersionID` = '{$this->versionid}',
                            `software_License` = '{$this->licentie->getID()}',
                            `leverancier_ID` = '{$this->leverancier->getID()}',
                            `software_AanschafDatum` =  '{$this->aanschafdatum}'
                      WHERE  `software`.`software_ID` ={$this->id}");
        } else {
            SQL::execute("INSERT INTO `software` (
                            `software_ID`, `software_Naam`, `software_afk`, `software_Omschrijving`, `software_VersionID`, `software_License`, `leverancier_ID`, `software_AanschafDatum`)
                             VALUES (NULL ,
                              '{$this->naam}',
                              '{$this->afkorting}',
                              '{$this->omschrijving}',
                              '{$this->versionid}',
                              '{$this->licentie->getID()}',
                              '{$this->leverancier->getID()}',
                              '{$this->aanschafdatum}')");
        }
    }

     /*
     * lezen van de gegvens van 1 enkel item
     */
    public static function read($id)
    {
        {
            $software = SQL::query("SELECT * FROM `software` WHERE `software_ID` = $id");

            if ($software->isValid()) {
                return Software::create($software->fetchField('software_ID'),
                                        $software->fetchField('software_Naam'),
                                        $software->fetchField('software_afk'),
                                        $software->fetchField('software_Omschrijving'),
                                        $software->fetchField('software_VersionID'),
                                        Leverancier::read($software->fetchField('leverancier_ID')),
                                        $software->fetchField('software_AanschafDatum'),
                                        Licentie::read($software->fetchField('software_License')));

            } else {
                return null;
            }
        }
    }

    /**
     * Lezen van de gegevens in een tabel
     */
    public static function readAll()
    {
        $list = array();
        $software = SQL::query("SELECT * FROM `software` ORDER BY 'software_ID'");
        while ($software->isValid()) {
            $list[] = Software::create($software->fetchField('software_ID'),
                                       $software->fetchField('software_Naam'),
                                       $software->fetchField('software_afk'),
                                       $software->fetchField('software_Omschrijving'),
                                       $software->fetchField('software_VersionID'),
                                       Leverancier::read($software->fetchField('leverancier_ID')),
                                       $software->fetchField('software_AanschafDatum'),
                                       Licentie::read($software->fetchField('software_License')));

            $software->next();
        }
        return $list;
    }

    /**
     * Setters & getters
     */
    public function setAanschafdatum($aanschafdatum)
    {
        $this->aanschafdatum = $aanschafdatum;
    }

    public function getAanschafdatum()
    {
        return $this->aanschafdatum;
    }

    public function setAfkorting($afkorting)
    {
        $this->afkorting = $afkorting;
    }

    public function getAfkorting()
    {
        return $this->afkorting;
    }

    public function setId($id)
    {
        $this->id = $id;
    }

    public function getId()
    {
        return $this->id;
    }

    public function setLeverancier($leverancier)
    {
        $this->leverancier = $leverancier;
    }

    public function getLeverancier()
    {
        return $this->leverancier;
    }

    public function setLicentie($licentie)
    {
        $this->licentie = $licentie;
    }

    public function getLicentie()
    {
        return $this->licentie;
    }

    public function setNaam($naam)
    {
        $this->naam = $naam;
    }

    public function getNaam()
    {
        return $this->naam;
    }

    public function setOmschrijving($omschrijving)
    {
        $this->omschrijving = $omschrijving;
    }

    public function getOmschrijving()
    {
        return $this->omschrijving;
    }

    public function setVersionid($versionid)
    {
        $this->versionid = $versionid;
    }

    public function getVersionid()
    {
        return $this->versionid;
    }


}
